package interfaz;

import javax.swing.JPanel;
import java.awt.Frame;
import java.awt.Toolkit;

import javax.swing.JDialog;
import java.awt.Dimension;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JTextPane;

import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JScrollPane;
import javax.swing.WindowConstants;

import excepciones.ContenidoException;
import excepciones.DataStructureException;

import logica.analizador.DocumentoJerarquicoEnlazado;
import logica.common.NodoColor;
import logica.estructura.RedSemantica;

public class VerCaminos extends JDialog implements ActionListener {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JMenuBar jJMenuBar = null;
	private JMenu jMenu = null;
	private JMenuItem jMenuItem = null;
	private JMenuItem jMenuItem1 = null;
	private JMenuItem jMenuItem2 = null;
	private JMenuItem jMenuItem3 = null;
	private JComboBox jComboBox = null;
	private JComboBox jComboBox1 = null;
	private JScrollPane jScrollPane = null;
	private JTextPane jTextPane=null;
	private String texto;
	
	/**
	 * @param owner
	 */
	public VerCaminos(Frame owner,String texto) {
		super(owner);
		this.texto=texto;
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(524, 323);
		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
		double fil=dim.getWidth();
		double col=dim.getHeight();
		fil=(fil-524)/2;
		col=(col-323)/2;
		this.setLocation((int)fil, (int)col);
		this.setTitle("Opciones de grafos");
		this.setResizable(false);
		this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		this.setJMenuBar(getJJMenuBar());
		this.setContentPane(getJContentPane());
		
		try {
			DocumentoJerarquicoEnlazado dj = new DocumentoJerarquicoEnlazado(texto);
			Vector<String> v=dj.getTitulos();
			
			for(int i=0;i<v.size();i++)
			{
				this.getJComboBox().addItem(v.elementAt(i));
				this.getJComboBox1().addItem(v.elementAt(i));
			}
			
			
		} catch (ContenidoException e) {
			JOptionPane.showMessageDialog(this, "Texto con errores de sintaxis", "Atencion!", 2);
		} catch (DataStructureException e) {
			JOptionPane.showMessageDialog(this, "Texto con errores de sintaxis", "Atencion!", 2);
		}
		this.getJTextPane().setEditable(false);
	}

	private JTextPane getJTextPane() {
		if (jTextPane == null) {
			jTextPane = new JTextPane();
			jTextPane.setEditable(false);
		}
		return jTextPane;
	}
	
	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJComboBox(), null);
			jContentPane.add(getJComboBox1(), null);
			jContentPane.add(getJScrollPane(), null);
		}
		return jContentPane;
	}

	/**
	 * This method initializes jJMenuBar	
	 * 	
	 * @return javax.swing.JMenuBar	
	 */
	private JMenuBar getJJMenuBar() {
		if (jJMenuBar == null) {
			jJMenuBar = new JMenuBar();
			jJMenuBar.add(getJMenu());
		}
		return jJMenuBar;
	}

	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getJMenu() {
		if (jMenu == null) {
			jMenu = new JMenu();
			jMenu.setText("Acciones");
			jMenu.add(getJMenuItem1());
			jMenu.add(getJMenuItem());
			jMenu.add(getJMenuItem2());
			jMenu.add(getJMenuItem3());
		}
		return jMenu;
	}

	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItem() {
		if (jMenuItem == null) {
			jMenuItem = new JMenuItem();
			jMenuItem.setText("Buscar ciclos");
			jMenuItem.addActionListener(this);
		}
		return jMenuItem;
	}

	/**
	 * This method initializes jMenuItem1	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItem1() {
		if (jMenuItem1 == null) {
			jMenuItem1 = new JMenuItem();
			jMenuItem1.setText("Camino mas corto");
			jMenuItem1.addActionListener(this);
		}
		return jMenuItem1;
	}

	/**
	 * This method initializes jMenuItem2	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItem2() {
		if (jMenuItem2 == null) {
			jMenuItem2 = new JMenuItem();
			jMenuItem2.setText("Buscar sumideros");
			jMenuItem2.addActionListener(this);
		}
		return jMenuItem2;
	}
	
	private JMenuItem getJMenuItem3() {
		if (jMenuItem3 == null) {
			jMenuItem3 = new JMenuItem();
			jMenuItem3.setText("Buscar todos los caminos");
			jMenuItem3.addActionListener(this);
		}
		return jMenuItem3;
	}

	/**
	 * This method initializes jComboBox	
	 * 	
	 * @return javax.swing.JComboBox	
	 */
	private JComboBox getJComboBox() {
		if (jComboBox == null) {
			jComboBox = new JComboBox();
			jComboBox.setBounds(new Rectangle(5, 4, 247, 24));
		}
		return jComboBox;
	}

	/**
	 * This method initializes jComboBox1	
	 * 	
	 * @return javax.swing.JComboBox	
	 */
	private JComboBox getJComboBox1() {
		if (jComboBox1 == null) {
			jComboBox1 = new JComboBox();
			jComboBox1.setBounds(new Rectangle(258, 4, 247, 24));
		}
		return jComboBox1;
	}

	/**
	 * This method initializes jScrollPane	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setBounds(new Rectangle(8, 35, 494, 223));
			jScrollPane.setViewportView(getJTextPane());
		}
		return jScrollPane;
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		if(arg0.getActionCommand()=="Buscar ciclos")
		{
			try {
				DocumentoJerarquicoEnlazado dJE1 = new DocumentoJerarquicoEnlazado(texto);
				RedSemantica rD = new RedSemantica (dJE1);
				this.getJTextPane().setText(rD.ciclos().toString());
			} catch (ContenidoException e) {
				JOptionPane.showMessageDialog(this, "Texto con errores de sintaxis", "Atencion!", 2);
			} catch (DataStructureException e) {
				JOptionPane.showMessageDialog(this, "Texto con errores de sintaxis", "Atencion!", 2);
			}
			
		}
		if(arg0.getActionCommand()=="Camino mas corto")
		{
			DocumentoJerarquicoEnlazado dJE1;
			try {
				dJE1 = new DocumentoJerarquicoEnlazado(texto);
				RedSemantica rD = new RedSemantica (dJE1);
				this.getJTextPane().setText(rD.caminoMasCorto(new NodoColor(this.getJComboBox().getSelectedItem().toString()), new NodoColor(this.getJComboBox1().getSelectedItem().toString())).toString());
			} catch (ContenidoException e) {
				JOptionPane.showMessageDialog(this, "Texto con errores de sintaxis", "Atencion!", 2);
			} catch (DataStructureException e) {
				JOptionPane.showMessageDialog(this, "Texto con errores de sintaxis", "Atencion!", 2);
			}
		}
		if(arg0.getActionCommand()=="Buscar sumideros")
		{
			DocumentoJerarquicoEnlazado dJE1;
			try {
				dJE1 = new DocumentoJerarquicoEnlazado(texto);
				RedSemantica rD = new RedSemantica (dJE1);
				this.getJTextPane().setText(rD.nodosSumideros().toString());
			} catch (ContenidoException e) {
				JOptionPane.showMessageDialog(this, "Texto con errores de sintaxis", "Atencion!", 2);
			} catch (DataStructureException e) {
				JOptionPane.showMessageDialog(this, "Texto con errores de sintaxis", "Atencion!", 2);
			}
		}
		
		if(arg0.getActionCommand()=="Buscar todos los caminos")
		{
			DocumentoJerarquicoEnlazado dJE1;
			try {
				dJE1 = new DocumentoJerarquicoEnlazado(texto);
				RedSemantica rD = new RedSemantica (dJE1);
				this.getJTextPane().setText(rD.caminos(new NodoColor(this.getJComboBox().getSelectedItem().toString()), new NodoColor(this.getJComboBox1().getSelectedItem().toString())).toString());
			} catch (ContenidoException e) {
				JOptionPane.showMessageDialog(this, "Texto con errores de sintaxis", "Atencion!", 2);
			} catch (DataStructureException e) {
				JOptionPane.showMessageDialog(this, "Texto con errores de sintaxis", "Atencion!", 2);
			}
		}
	}

}  //  @jve:decl-index=0:visual-constraint="10,10"
